Field
The present disclosed embodiments relate generally to software profiling tools, and more specifically to profiling user space applications.
Background
As codebases grow and open source software modules drive code libraries towards becoming black-boxes, profiling tools are critically important for end users to properly understand hotspots in their applications. The area of profilers is well researched and developed for several decades now. Typical profiling approaches rely on utilizing system profiling tools such as LINUX “perf,” which in turn have capabilities to read built in system sampling counters and provide users with an accurate system-wide perspective of application performance. Other alternatives rely on extensive instrumentation of either compiler-generated code (thereby affecting and modifying application performance) or user initiated manual modification of source code to derive hotspot profiles. To summarize, the approaches either rely on platform support (LINUX-perf) or are slow and utilize extensive application wide instrumentation or require user-initiated modification of source code.
The problem of availability of such a profiling capability is even more pronounced in the realm of mobile devices, especially when dealing with user space applications. The system support (for utilities such as “perf”) is virtually non-existent in the default configuration of a mobile operating system such as the ANDROID operating system. Adding support for perf is possible, but it requires rooting the devices, which is an onerous process, and typical user space developers are hesitant to do so. Utilizing the extensive compiler driven instrumented profiling approach tends to shift the hotspots because it affects the overall execution speed, and is even more pronounced in threaded applications. User initiated source code modification is possible, but it requires that users actually understand all of their code (including third party libraries) and is also a maintenance headache.